package cn.kgc;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Hello world!
 *
 */
public class Demo1 {
    public static void main( String[] args ) {
       //Runnable接口和Callable接口有什么区别?
       // Runnable接口中的run方法没有参数    没有返回值    也不会抛出异常信息
       // Callable接口中的call方法没有参数   有返回值     抛出异常信息
    }

    private static void method2() {
        //固定数量的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        //向线程池中添加任务 (任务是一个Callable接口的对象)
        for (int i=1;i<=1000;i++){
            executorService.submit(
                    () -> {
                        String name = Thread.currentThread().getName();
                        System.out.println(name + "执行任务");
                        return name;
                    }
            );
        }
        //关闭线程池
        executorService.shutdown();
    }

    private static void method1() {
        //固定线程数的线程池
        //创建一个拥有10个核心线程 最大线程数为10的线程池。线程中的线程没有空闲时间,任务队列是一个无界队列。
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for(int i=1;i<=1000;i++){
            //使用Runnable接口的对象向线程池中添加任务
            executorService.submit(()->{
                //获得线程名称
                String name = Thread.currentThread().getName();
                //打印线程的名称
                System.out.println(name+"执行任务");
            });
        }
        //关闭线程池 (等待线程池中的任务都执行完毕以后在关闭线程池)
        executorService.shutdown();
    }
}
